#ifndef MAPEADOR_H_
#define MAPEADOR_H_

#include <stdio.h>
#include <iostream>
#include <vector>
#include "define.h"
#include <string.h>
#include <utility>
#include <map>
#include <iomanip>
#include <memory.h>
#include <cstdlib>
#include <math.h>
#include <fstream>

typedef std::pair<std::string, unsigned int > rango_mapa;
typedef std::pair<unsigned int,std::string > rango_mapa_a_recuperar;

class Mapeador {

private:

	static Mapeador* mapeador;
	std::vector<std::string> vectorCadenas;
	std::map <std::string , unsigned char> mapaRangos;
	std::map <unsigned char,std::string > mapaRangosARecuperar;

protected:
	void cargarRangos();
	void cargarMapeador ();
	Mapeador();

public:

	static Mapeador* getInstance();
	char* mapIdToString(u_int32_t id);
	u_int32_t mapStringToId(std::string id);
	~Mapeador(){};
	/* pasar fecha en formato: año , mes , dia
	 rango 0..47 siendo 0 -> 00:00 - 00:30
						1 -> 00:30 - 01:00
						.................
						47-> 23:30 - 00:00
	queda el id en los 24bits mas significativos
	*/
	u_int32_t convertirRango (unsigned int anio, unsigned char mes, unsigned  char dia, std::string rango);

	/* se carga en anio mes dia rango los valores almacenados en idARecuperar
	 * tener en cuenta que este metodo recupera desde los 24bits mas significativos
	 */
	void recuperarRango (u_int32_t idARecuperar, unsigned int* anio, unsigned char* mes, unsigned char* dia, std::string* rango);

	// se parsea lo que hay en fechaLeida y se completan los datos de la fecha y el rango
	void mapearFechaLeida(std::string& fechaLeida, unsigned int* anio, unsigned char* mes, unsigned char* dia, std::string* rango);


};


#endif /* MAPEADOR_H_ */
